package com.sapitest.utils.data;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @date 2019-01-13
 * @author Liuxu
 * @version 1.0.0
 * @since jdk1.8
 */
public class TimeUtil {
    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 按照指定格式，获取当前时间字符串
     * @param format 格式
     * @return  时间字符串
     */
    public static String getCurrentTime(String format) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        return formatter.format(new Date());
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 按照指定格式将字符串转换为时间
     * @param dateString    时间字符串
     * @param format    格式
     * @return  时间对象java.util.Date
     */
    private static Date strToDate(String dateString, String format) {
        return new SimpleDateFormat(format).parse(dateString, new ParsePosition(0));
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 将给定的时间字符串text 前移或者后延指定时间后，返回时间字符串
     * @param text  给定的时间字符串
     * @param format    格式
     * @param delayYear     前移或者后延的年
     * @param delayMonth    前移或者后延的月
     * @param delayDay  前移或者后延的天
     * @param delayHour 前移或者后延的小时
     * @param delayMinute   前移或者后延的分
     * @param delaySecond   前移或者后延的秒
     * @return  时间字符串
     */
    public static String getScheduleTime(String text, String format, int delayYear, int delayMonth, int delayDay, int delayHour, int delayMinute, int delaySecond) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(strToDate(text, format));
        calendar.add(Calendar.YEAR, delayYear);
        calendar.add(Calendar.MONTH, delayMonth);
        calendar.add(Calendar.DATE, delayDay);
        calendar.add(Calendar.HOUR, delayHour);
        calendar.add(Calendar.MINUTE, delayMinute);
        calendar.add(Calendar.SECOND, delaySecond);
        return formatter.format(calendar.getTime());
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 将当前时间前移或者后延指定时间后，返回时间字符串
     * @param format    格式
     * @param delayYear     前移或者后延的年
     * @param delayMonth    前移或者后延的月
     * @param delayDay  前移或者后延的天
     * @param delayHour 前移或者后延的小时
     * @param delayMinute   前移或者后延的分
     * @param delaySecond   前移或者后延的秒
     * @return  时间字符串
     */
    public static String getScheduleTime(String format, int delayYear, int delayMonth, int delayDay, int delayHour, int delayMinute, int delaySecond) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, delayYear);
        calendar.add(Calendar.MONTH, delayMonth);
        calendar.add(Calendar.DATE, delayDay);
        calendar.add(Calendar.HOUR, delayHour);
        calendar.add(Calendar.MINUTE, delayMinute);
        calendar.add(Calendar.SECOND, delaySecond);
        return formatter.format(calendar.getTime());
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 将当前时间前移或者后延指定时间后，返回时间字符串
     * @param format    格式
     * @param delayYear     前移或者后延的年
     * @param delayMonth    前移或者后延的月
     * @param delayDay  前移或者后延的天
     * @return  时间字符串
     */
    public static String getScheduleTime(String format, int delayYear, int delayMonth, int delayDay) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, delayYear);
        calendar.add(Calendar.MONTH, delayMonth);
        calendar.add(Calendar.DATE, delayDay);
        return formatter.format(calendar.getTime());
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 将当前时间前移或者后延指定时间后，返回时间字符串
     * @param format    格式
     * @param delayYear     前移或者后延的年
     * @param delayMonth    前移或者后延的月
     * @return  时间字符串
     */
    public static String getScheduleTime(String format, int delayYear, int delayMonth) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, delayYear);
        calendar.add(Calendar.MONTH, delayMonth);
        return formatter.format(calendar.getTime());
    }

    /**
     * 年：yyyy 月：MM 日：dd 时：HH 分：mm 秒：ss
     * 将当前时间前移或者后延指定时间后，返回时间字符串
     * @param format    格式
     * @param delayYear     前移或者后延的年
     * @return  时间字符串
     */
    public static String getScheduleTime(String format, int delayYear) {
        SimpleDateFormat formatter = new SimpleDateFormat(format);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, delayYear);
        return formatter.format(calendar.getTime());
    }

}
